<?php
/**
 * 縦型カレンダーコンポーネントモジュール
 */
require_once __DIR__ . '/../ZendPartial.php';
require_once 'Request/DateTime.php';
require_once 'DateMath.php';
require_once 'Holiday/holiday.php';
require_once APPLICATION_PATH . '/models/Calendar/xml/CalendarXmlController.php';
require_once APPLICATION_PATH . '/models/Names/Names.php';

/**
 * 縦型カレンダーコンポーネントクラス
 * 'year' ＨＴＴＰリクエストから年を取得
 * 'month' ＨＴＴＰリクエストから月を取得
 * 年月から日付と曜日を設置しカレンダーを生成
 * <a href="https://www.evernote.com/shard/s89/sh/93708158-7627-4bcc-a563-53aa8e67f509/ef85f6c844833c85288eff7ccb952cef">開発メモ</a>
 * <a href="https://www.lucidchart.com/documents/edit/44f3-ba70-509ed991-8bc8-120c0a60e377">モジュール構成図</a>
 */
class Components_Calendar_VerticalCalendarController extends  Components_ZendPartial
{
	/** テンプレートファイル名 */
	const TEMPLATE_NAME = 'VerticalCalendarView.php';

	/** ハッシュキー：データセット */
	const KEY_DATASET = 'DATASET';

	/** ハッシュキー：予定一覧 */
	const KEY_YOTEI_ICHIRAN = 'YOTEI_ICHIRAN';
	/** ハッシュキー：曜日 */
	const KEY_YOUBI = 'YOUBI';
	/** ハッシュキー：祝日 */
	const KEY_HOLIDAY = 'HOLIDAY';
	/** ハッシュキー：予定情報 */
	const KEY_YOTEI_JOHO = 'YOTEI_JOHO';
	/** ハッシュキー：活動種別 */
	const KEY_KATSUDO_SYUBETU = 'KATSUDO_SYUBETU';
	/** ハッシュキー：開始終了時刻 */
	const KEY_KAISHI_SYURYO_JIKOKU = 'KAISHI_SYURYO_JIKOKU';
	/** ハッシュキー：学年 */
	const KEY_GAKUNEN = 'GAKUNEN';
	/** ハッシュキー：活動リンク */
	const KEY_KATUDO_LINK = 'KATUDO_LINK';
	/** ハッシュキー：試合結果速報リンク */
	const KEY_SIAI_KEKKA_SOKUHO_LINK = 'SIAI_KEKKA_SOKUHO_LINK';
	/** ハッシュキー：試合結果速報ラベル */
	const KEY_SIAI_KEKKA_SOKUHO_LABEL = 'SIAI_KEKKA_SOKUHO_LABERU';

	public function __construct()
	{
		parent::__construct(__DIR__);

		/***
		 * 表示予定一覧スケルトン定義
		 */
		$View[self::KEY_YOTEI_ICHIRAN] []
		= array(
				self::KEY_YOUBI=>'',
				self::KEY_YOTEI_JOHO=>array(
						self::KEY_KATSUDO_SYUBETU=>'',
						self::KEY_KAISHI_SYURYO_JIKOKU=>'',
						self::KEY_GAKUNEN=>'',
						self::KEY_KATUDO_LINK=>'',
						self::KEY_SIAI_KEKKA_SOKUHO_LINK=>'',
						self::KEY_SIAI_KEKKA_SOKUHO_LABEL
						),
				);

		/***
		 * HTTPリクエストから年月を取得
		 * 当該月の最終日をライブラリから取得
		 * 当該月のスケジュールをモデルから取得
		 */
		$objDateMath = new DateMath();
		$objRequest = new Lib_Request_DateTime();
		$year = $objRequest->getYear();
		$month = sprintf('%02d', $objRequest->getMonth());

		$this->view->Year = $year;
		$this->view->Month = $month;

		$objHoliday = new holiday($year);
		$objScheduleDataset = new Models_Calendar_Xml_Controller($year.$month);

		$LastMonthDay = DateMath::getMonthEndDay($year, sprintf('%02d',$month));

		$i = 1;
		while ($i <= $LastMonthDay){
			$sDateTime = $year.sprintf('%02d',$month).sprintf('%02d',$i).'0000';
			$sDate = $year.sprintf('%02d',$month).sprintf('%02d',$i);
			$Youbi = $objDateMath->getDayOfWeek($sDateTime);
			$View[self::KEY_YOTEI_ICHIRAN][$i]
			= array(
					self::KEY_YOUBI=>$objDateMath->aryDayOfWeekJp[$Youbi],
					self::KEY_YOTEI_JOHO=>$objScheduleDataset->getDayDataset($i),
					self::KEY_HOLIDAY=>$objHoliday->isHoliday($sDate),
					);
			$i++;
		}
		unset($View[self::KEY_YOTEI_ICHIRAN][0]);
		$this->view->Data = $View;
	}

	public function fetch()
	{
		$sHtml = parent::fetch(self::TEMPLATE_NAME);
		return $sHtml;
	}
}